import { observe } from "../observer"


export function initState(vm){
    const opts = vm.$options
    if(opts.props) initProps(vm,opts.props)
    if(opts.methods) initMethods(vm,opts.methods)
    if(opts.data) {
        initData(vm) 
    }else{
        //直接对数据观测
       // observe(vm._data = {})
    }
    if(opts.computed) initComputed(vm,opts.computed)
    if(opts.watch) initWatch(vm,opts.watch)
}
function initProps(vm,props){
    
}
function initMethods(vm,methods){
     
}
function initData(vm){ //data可能是对象，也可能是一个函数
    let data = vm.$options.data;
    data = vm._data = typeof data == 'function'? data.call(vm,vm):data||{};
    for(key in data){
        proxy(vm,'_data',key)
    }
    observe(data);  //对数据进行观测
}
function initComputed(vm,computed){
   console.log(computed)
}
function initWatch(){
   
}
//对vm[key]的访问代理到vm._data[key]上
function proxy(target,sourceKey,key){
    Object.defineProperty(target,key,{
        get(){
            return target[sourceKey][key]
        },
        set(newValue){
            vm[sourceKey][key] = newValue
        }
    })
}